iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0
自我挑戰組

自我挑戰系列 第 6

#05 deployment.yaml

  • 分享至 

  • xImage
  •  
  • 但是目前部署所使用的都是 deployment yaml, 所以暫且先了解一下 deployment.yaml
  • Deployment 主要可定義應用程式的期望狀態,它會自動處理副本集的建立、升級和故障復原。

基本元素

一個 Deployment YAML 檔案通常由以下幾個基本元素組成:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app-container
          image: my-app-image:latest
  • apiVersion: 指定了使用的 Kubernetes API 版本,通常為 apps/v1。
  • kind: 表示資源類型,這裡有一個 Deployment。
  • metadata: 包含有關 Deployment 的 raw data,包括名稱。
  • spec: 指定了 Deployment 的規範,包括 replica 數量、selector 和 Pod template。

架構組成

Replicas

  • 使用 replicas 指定 Deployment 中 replica (副本) 的數量。 Kubernetes 會根據這個數量建立和維護副本集,確保它們與宣告的 replica 數相符。
replicas: 3

Selector (選擇器)

  • 使用 selector 定義 Deployment 控制的 Pod 的選擇器。 這個 selector 通常與 Pod template 中的 label 匹配,以確保 Deployment 可以管理這些 Pod。
selector:
  matchLabels:
    app: my-app

Pod Template

在 template 欄位中定義 Pod 模板,該模板用於建立新的 Pod 副本。 它包括了 Pod 的 meta data 和 specs。

template:
  metadata:
    labels:
      app: my-app
  spec:
    containers:
      - name: my-app-container
        image: my-app-image:latest
  • 在 Pod template 中,可以定義容器的配置,包括名稱、container image、port mapping、資源限制等。

注意事項

  • 在編寫 Deployment 的 YAML 檔案時,需要考慮以下注意事項:

更新策略

預設情況下,Deployment 使用滾動更新策略來升級 Pod。 這意味著它將逐步替換舊的 Pod 副本,確保新版本的應用程式逐漸接管流量。我們可以配置滾動更新的速度和失敗閾值。

strategy:
  type: RollingUpdate
  rollingUpdate:
    maxUnavailable: 1
    maxSurge: 1

rollback 策略

在發生問題時,您可以回滾到先前的版本。 使用 rollbackTo 來指定要回滾到的版本。

rollbackTo:
  revision: 2

環境變數 environment variable

  • 可以使用 env 欄位向 container 傳遞環境變量,配置應用程式的行為。
containers:
  - name: my-app-container
    image: my-app-image:latest
    env:
      - name: DB_HOST
        value: db-server

volume

  • 如果您的應用程式需要持久化存儲,可以在 Pod 範本中設定磁碟區掛載。
volumes:
  - name: my-volume
    persistentVolumeClaim:
      claimName: my-pvc

Example

以下是一個還算完整的 deployment.yaml :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app-container
          image: my-app-image:latest
          ports:
            - containerPort: 80
          resources:
            limits:
              cpu: "0.5"
              memory: "512Mi"
            requests:
              cpu: "0.2"
              memory: "256Mi"
          env:
            - name: DB_HOST
              value: db-server
          volumeMounts:
            - name: my-volume
              mountPath: /data
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  rollbackTo:
    revision: 2
  volumes:
    - name: my-volume
      persistentVolumeClaim:
        claimName: my-pvc

上一篇
#04 pod.yaml
下一篇
# 06 service yaml
系列文
自我挑戰9
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言